<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
    <th:block th:include="include :: header('修改立项申请')" />
    <th:block th:include="include :: datetimepicker-css" />
    <th:block th:include="include :: bootstrap-fileinput-css"/>
    <th:block th:include="include :: select2-css" />
</head>
<body class="white-bg">
    <div class="wrapper wrapper-content animated fadeInRight ibox-content">
        <form class="form-horizontal m" id="form-apply-edit" th:object="${sciHorizontalApplyVertical}">

            <input name="id" id="ktid" th:field="*{id}" type="hidden">
            <input name="state" id="state" th:field="*{state}" type="hidden">

            <h4 class="form-header h4">基本信息</h4>
            <div class="row">
            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">申请人：</label>
                    <div class="col-sm-8">
                        <select name="userId" class="form-control m-b" disabled>
                            <option th:each="user : ${sysUsers1}" th:text="${user.userName}" th:value="${user.userId}" th:selected="${ user.userId == sciHorizontalApplyVertical.userId}" ></option>
                        </select>
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">课题类型：</label>
                    <div class="col-sm-8">
                        <select name="topType" class="form-control" th:with="type=${@dict.getType('sci_vertical_type')}" required>
                            <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{topType}"></option>
                        </select>
                    </div>
                </div>
            </div>
            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">课题名称：</label>
                    <div class="col-sm-8">
                        <input name="topName" th:field="*{topName}" class="form-control" type="text" required maxlength="50">
                    </div>
                </div>
            </div>
            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">课题编号：</label>
                    <div class="col-sm-8">
                        <input   th:field="*{topNumber}" class="form-control" type="text" maxlength="20">
                    </div>
                </div>
            </div>
            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">项目金额(万)：</label>
                    <div class="col-sm-8">
                        <input name="amount" th:field="*{amount}" class="form-control" type="number" required step="0.0001" maxlength="9">
                    </div>
                </div>
            </div>



            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">立项日期：</label>
                    <div class="col-sm-8">
                        <div class="input-group date">
                           <input name="signingData" autocomplete="off" th:field="*{signingData}" th:value="${#dates.format(signingData, 'yyyy-MM-dd')}" class="form-control" placeholder="yyyy-MM-dd" type="text" required>
                            <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                        </div>
                    </div>
                </div>
            </div>
            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">主持人：</label>
                    <div class="col-sm-8">
<!--                        <input name="firstPersonId" th:field="*{firstPersonId}" class="form-control" type="text" required>-->
                        <select id="firstPersonSelect" name="firstPersonId_disabled" class="form-control m-b" required disabled="true">
                            <option value="">无</option>
                            <option th:each="user : ${sysUsers1}" th:text="${user.userName}" th:value="${user.userId}" th:selected="${ #strings.toString(user.userId) == sciHorizontalApplyVertical.firstPersonId}"></option>
                        </select>
                        <input type="hidden" name="firstPersonId" th:value="*{firstPersonId}">
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">成员1：</label>
                    <div class="col-sm-8">
<!--                        <input name="secondPersonTask" th:field="*{secondPersonTask}" class="form-control" type="text" required>-->
                        <select id="member1Select" name="secondPersonId" class="form-control m-b" onchange="updateMemberLists()" required>
                            <option value="">无</option>
                            <option th:each="user : ${sysUsers1}" th:text="${user.userName}" th:value="${user.userId}" th:selected="${ #strings.toString(user.userId) == sciHorizontalApplyVertical.secondPersonId}" ></option>
                        </select>
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">成员2：</label>
                    <div class="col-sm-8">
<!--                        <input name="thirdPersonId" th:field="*{thirdPersonId}" class="form-control" type="text" required>-->
                        <select id="member2Select" name="thirdPersonId" class="form-control m-b" onchange="updateMemberLists()" required>
                            <option value="">无</option>
                            <option th:each="user : ${sysUsers1}" th:text="${user.userName}" th:value="${user.userId}" th:selected="${ #strings.toString(user.userId) == sciHorizontalApplyVertical.thirdPersonId}"  ></option>
                        </select>
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">成员3：</label>
                    <div class="col-sm-8">
<!--                        <input name="fourthPersonId" th:field="*{fourthPersonId}" class="form-control" type="text" required>-->
                        <select id="member3Select" name="fourthPersonId" class="form-control m-b" onchange="updateMemberLists()" required>
                            <option value="">无</option>
                            <option th:each="user : ${sysUsers1}" th:text="${user.userName}" th:value="${user.userId}" th:selected="${ #strings.toString(user.userId) == sciHorizontalApplyVertical.fourthPersonId}"  ></option>
                        </select>
                    </div>
                </div>
            </div>

            <!-- 第5位及以后：可动态添加 -->
            <div class="col-xs-12">
                <div class="form-group">
                    <label class="col-sm-2 control-label">更多成员：</label>
                    <div class="col-sm-10">
                        <div id="memberContainer" class="row" th:data-extra-members="${extraMembers}"></div>
                        <button type="button" id="addMemberBtn" class="btn btn-white btn-sm" title="新增成员">
                            <a href="#"><i class="fa fa-plus-circle" ></i>增加成员</a>
                        </button>
                    </div>
                </div>
            </div>

            <div class="col-xs-6">
                <div class="form-group">
                    <label class="col-sm-4 control-label is-required">立项文件上传：</label>
                    <div class="col-sm-8">
                        <input type="hidden" name="file" th:field="*{file}">
                        <div class="file-loading">
                            <input class="form-control file-upload" id="file" name="file" type="file">
                        </div>
                    </div>
                </div>
            </div>
            </div>


            <h4 class="form-header h4"> 批阅记录</h4>
            <div class="row">
                <div class="col-sm-12">
                    <div class="form-group">
                        <table id="bootstrap-table"></table>
                    </div>
                </div>
            </div>
        </form>
    </div>
    <div class="row">
        <div class="col-sm-offset-5 col-sm-10">
            <button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()">  </i>保 存</button>&nbsp;
            <button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"> 关 闭 </button>
        </div>
    </div>
    <th:block th:include="include :: footer" />
    <th:block th:include="include :: datetimepicker-js" />
    <th:block th:include="include :: bootstrap-fileinput-js"/>
    <th:block th:include="include :: select2-js" />
    <script type="text/javascript">
        $(function(){

            var kid = $("#ktid").val();
            var options = {
                url: prefix + "/abhyy/"+kid,
                showSearch: false,
                showRefresh: false,
                showToggle: false,
                showColumns: false,
                pagination:false,
                sortName: "createTime",
                sortOrder: "desc",
                columns: [

                    {
                        field : 'createTime',
                        title : '批阅时间',
                        width: 200

                    } ,
                    {
                        field : 'uname',
                        title : '批阅人',
                        width: 100
                    },
                    {
                        field : 'concate',
                        title : '内容',
                        width: 500
                    },
                    {
                        field : 'state',
                        title : '审核状态',
                        width: 100
                    } ]
            };
            $.table.init(options);

            // 动态新增成员下拉（第5位起）与编辑页预渲染
                        // 动态新增成员下拉（第5位起）与编辑页预渲染
            $(function(){
                function appendMemberSelect(selectedVal) {
                    // 获取原始选项数据
                    var originalOptions = $('#member1Select').data('original-options');
                    var memberCount = $('.member-item').length + 1; // 计算当前成员数量
                    var memberId = 'dynamicMember' + memberCount; // 为每个动态成员生成唯一ID

                    var $tpl = $('<div class="col-xs-3 m-b-xs member-item">\n                        <div class="input-group">\n                            <select id="' + memberId + '" name="members" class="form-control m-b member-select select2-select" onchange="updateDynamicMemberList(this)"></select>\n                            <span class="input-group-btn">\n                                <button class="btn btn-danger btn-sm remove-member" type="button" title="移除"><i class="fa fa-minus"></i></button>\n                            </span>\n                        </div>\n                    </div>');

                    var $select = $tpl.find('select.member-select');

                    // 添加默认选项和原始选项
                    $select.html('<option value="">无</option>' + originalOptions);

                    $('#memberContainer').append($tpl);

                    // 如果有选中的值，先设置选中值
                    if (selectedVal) {
                        $select.val(String(selectedVal));
                    }

                    // 初始化新添加的下拉框选项
                    updateDynamicMemberList($select[0]);

                    // 初始化Select2，支持输入检索
                    $select.select2({
                        width: '100%',
                        placeholder: '输入检索成员',
                        allowClear: true
                    });

                    // 如果有选中的值，触发change事件
                    if (selectedVal) {
                        $select.trigger('change');
                    }
                }

                // 预渲染已有的第5位及以后成员
                var extraMembers = $('#memberContainer').data('extra-members');

                if (Array.isArray(extraMembers)) {
                    extraMembers.forEach(function(mid){ appendMemberSelect(mid); });
                } else if (extraMembers) {
                    try {
                        var arr = JSON.parse(extraMembers);
                        if (Array.isArray(arr)) arr.forEach(function(mid){ appendMemberSelect(mid); });
                    } catch(e) {}
                }

                $('#addMemberBtn').on('click', function(){
                    appendMemberSelect(null);
                });

                $(document).on('click', '.remove-member', function(){
                    $(this).closest('.member-item').remove();
                });
                
                // 成员下拉框联动功能
                // 页面加载完成后保存原始选项并初始化联动
                $('#member1Select, #member2Select, #member3Select').each(function() {
                    var originalOptions = $(this).html();
                    $(this).data('original-options', originalOptions);
                });
                
                // 保存主持人下拉框的原始选项（虽然不可编辑，但需要用于联动）
                var firstPersonOriginalOptions = $('#firstPersonSelect').html();
                $('#firstPersonSelect').data('original-options', firstPersonOriginalOptions);
                
                // 预渲染已有的第5位及以后成员（在保存原始选项之后）
                setTimeout(function() {
                    // 先清空已有的成员项目，避免重复添加
                    $('#memberContainer').empty();
                    
                    var extraMembers = $('#memberContainer').data('extra-members');
                    if (Array.isArray(extraMembers)) {
                        extraMembers.forEach(function(mid){ appendMemberSelect(mid); });
                    } else if (extraMembers) {
                        try {
                            var arr = JSON.parse(extraMembers);
                            if (Array.isArray(arr)) arr.forEach(function(mid){ appendMemberSelect(mid); });
                        } catch(e) {}
                    }
                }, 50);
                
                // 初始化联动效果
                updateMemberLists();
                
                // 初始化Select2组件以支持搜索功能
                $('#member1Select, #member2Select, #member3Select').select2({
                    placeholder: "无",
                    allowClear: true,
                    width: "100%"
                });
                
                // 为主持人下拉框初始化Select2（虽然不可编辑，但可以改善显示效果）
                $('#firstPersonSelect').select2({
                    placeholder: "无",
                    allowClear: true,
                    width: "100%"
                });

                // 页面加载完成后，更新所有动态成员的选项
                setTimeout(function() {
                    updateMemberLists();
                }, 100);

            });
            <!-- laydate示例 -->
            layui.use('laydate', function(){
                var laydate = layui.laydate;
                laydate.render({
                    elem: '#laydate-demo-4',
                    range: true
                });
                var startDate = laydate.render({
                    elem: '#laydate-startTime',
                    max: $('#laydate-endTime').val(),
                    theme: 'molv',
                    trigger: 'click',
                    done: function(value, date) {
                        // 结束时间大于开始时间
                        if (value !== '') {
                            endDate.config.min.year = date.year;
                            endDate.config.min.month = date.month - 1;
                            endDate.config.min.date = date.date;
                        } else {
                            endDate.config.min.year = '';
                            endDate.config.min.month = '';
                            endDate.config.min.date = '';
                        }
                    }
                });
                var endDate = laydate.render({
                    elem: '#laydate-endTime',
                    min: $('#laydate-startTime').val(),
                    theme: 'molv',
                    trigger: 'click',
                    done: function(value, date) {
                        // 开始时间小于结束时间
                        if (value !== '') {
                            startDate.config.max.year = date.year;
                            startDate.config.max.month = date.month - 1;
                            startDate.config.max.date = date.date;
                        } else {
                            startDate.config.max.year = '';
                            startDate.config.max.month = '';
                            startDate.config.max.date = '';
                        }
                    }
                });
            });

        });
        
        // 更新成员下拉框列表
        function updateMemberLists() {
            // 获取所有已选中的成员ID（使用Set自动去重）
            var selectedIds = new Set();
            
            // 获取主持人下拉框的值（虽然不可编辑，但仍需参与联动）
            var firstPersonValue = $('#firstPersonSelect').val();
            
            // 获取三个固定成员下拉框的值
            var member1Value = $('#member1Select').val();
            var member2Value = $('#member2Select').val();
            var member3Value = $('#member3Select').val();
            
            // 将非空值添加到Set中
            if (firstPersonValue) selectedIds.add(firstPersonValue);
            if (member1Value) selectedIds.add(member1Value);
            if (member2Value) selectedIds.add(member2Value);
            if (member3Value) selectedIds.add(member3Value);
            
            // 添加动态成员的选中值
            $('.member-select').each(function() {
                var value = $(this).val();
                if (value) {
                    selectedIds.add(value);
                }
            });
            
            // 为每个固定下拉框更新选项（不包括主持人，因为主持人下拉框不可编辑）
            updateSelectOptions('#member1Select', member1Value, selectedIds);
            updateSelectOptions('#member2Select', member2Value, selectedIds);
            updateSelectOptions('#member3Select', member3Value, selectedIds);
            
            // 为每个动态下拉框更新选项
            $('.member-select').each(function() {
                updateDynamicSelectOptions($(this), $(this).val(), selectedIds);
            });
        }
        
        // 更新单个下拉框的选项
        function updateSelectOptions(selectId, currentValue, selectedIds) {
            var selectElement = $(selectId);
            var originalOptions = selectElement.data('original-options');
            var isCurrentlySelected = selectElement.val(); // 保存当前选中的值
            
            // 清空当前选项（保留第一个提示选项）
            selectElement.find('option:not(:first)').remove();
            
            // 解析原始选项
            var tempDiv = $('<div>' + originalOptions + '</div>');
            var hasBlankOption = false; // 标记是否已添加空选项
            
            tempDiv.find('option').each(function() {
                var option = $(this);
                var value = option.val();
                
                // 只有当选项值为空（请选择）或未被其他下拉框选中时才添加
                // currentValue（当前下拉框已选中的值）总是会被保留，如果它不在其他下拉框中
                if (value === "" && !hasBlankOption) {
                    // 只添加一次空选项
                    selectElement.append(option.clone());
                    hasBlankOption = true;
                } else if (value !== "" && (!selectedIds.has(value) || value === currentValue || value === "-1")) {
                    // 添加非空选项，如果它未被其他下拉框选中，或者是当前下拉框已选中的值，或者userId为-1（其他）
                    selectElement.append(option.clone());
                }
            });
            
            // 重新设置选中状态，确保选中的值仍然被选中
            if (isCurrentlySelected) {
                selectElement.val(isCurrentlySelected);
            }
        }
        
        // 更新动态添加的成员下拉框
        function updateDynamicMemberList(element) {
            var selectElement = $(element);
            var currentValue = selectElement.val();
            var allSelectedIds = getSelectedIds();
            
            // 为动态成员下拉框更新选项
            updateDynamicSelectOptions(selectElement, currentValue, allSelectedIds);
        }
        
        // 获取所有已选中的ID（包括固定成员和动态成员）
        function getSelectedIds() {
            var selectedIds = new Set();
            
            // 添加主持人下拉框的选中值（虽然不可编辑，但仍需参与联动）
            var firstPersonValue = $('#firstPersonSelect').val();
            
            // 添加固定成员的选中值
            var member1Value = $('#member1Select').val();
            var member2Value = $('#member2Select').val();
            var member3Value = $('#member3Select').val();
            
            if (firstPersonValue) selectedIds.add(firstPersonValue);
            if (member1Value) selectedIds.add(member1Value);
            if (member2Value) selectedIds.add(member2Value);
            if (member3Value) selectedIds.add(member3Value);
            
            // 添加动态成员的选中值
            $('.member-select').each(function() {
                var value = $(this).val();
                if (value) {
                    selectedIds.add(value);
                }
            });
            
            return selectedIds;
        }
        
        // 更新动态下拉框的选项
        function updateDynamicSelectOptions(selectElement, currentValue, selectedIds) {
            var originalOptions = $('#member1Select').data('original-options');
            var isCurrentlySelected = selectElement.val(); // 保存当前选中的值
            
            // 清空当前选项（保留第一个提示选项）
            selectElement.find('option:not(:first)').remove();
            
            // 解析原始选项
            var tempDiv = $('<div>' + originalOptions + '</div>');
            var hasBlankOption = false; // 标记是否已添加空选项
            
            tempDiv.find('option').each(function() {
                var option = $(this);
                var value = option.val();
                
                // 只有当选项值为空（请选择）或未被其他下拉框选中时才添加
                // currentValue（当前下拉框已选中的值）总是会被保留，如果它不在其他下拉框中
                if (value === "" && !hasBlankOption) {
                    // 只添加一次空选项
                    selectElement.append(option.clone());
                    hasBlankOption = true;
                } else if (value !== "" && (!selectedIds.has(value) || value === currentValue || value === "-1")) {
                    // 添加非空选项，如果它未被其他下拉框选中，或者是当前下拉框已选中的值，或者userId为-1（其他）
                    selectElement.append(option.clone());
                }
            });
            
            // 重新设置选中状态，确保选中的值仍然被选中
            if (isCurrentlySelected) {
                selectElement.val(isCurrentlySelected);
            }
        }
    </script>
    <script th:inline="javascript">
        var prefix = ctx + "system/apply_vertical";
        $("#form-apply-edit").validate({
            focusCleanup: true
        });

        $("input[name='amount']").on('input', function() {
            var value = $(this).val();
            // 限制整数部分不超过9位
            if (value) {
                var numericValue = parseFloat(value);
                // 限制整数部分长度
                if (value.indexOf('.') !== -1) {
                    var parts = value.split('.');
                    if (parts[0].length > 9) {
                        $(this).val(parts[0].substring(0, 9) + (parts[1] ? '.' + parts[1] : ''));
                    }
                } else {
                    if (value.length > 9) {
                        $(this).val(value.substring(0, 9));
                    }
                }
                // 限制小数点后只能输入四位
                if (value.indexOf('.') !== -1) {
                    var parts = value.split('.');
                    if (parts[1] && parts[1].length > 4) {
                        $(this).val(parts[0] + '.' + parts[1].substring(0, 4));
                    }
                }
                // 限制最大值
                var valueStr = numericValue.toString();
                if (valueStr.length > 9){
                    this.value = "";
                    $.modal.alertError("输入金额有误差：总长度最大9位数，小数点后最大四位；例：9999.9999")
                }
            }
        });

        function submitHandler() {
            if ($.validate.form()) {
                var file = $("input[name='file']").val();
                if ($.validate.form()) {
                if (file == "") {
                    $.modal.alertWarning("请上传文件");
                    return;
                }
                // 校验项目金额不能为负数
                var projectAmount = $("input[name='amount']").val();
                if (parseFloat(projectAmount) < 0) {
                    return $.modal.alertError("请输入有效的项目金额");
                }

                // 校验项目金额小数点后最多4位
                if (!/^\d+(\.\d{1,4})?$/.test(projectAmount)) {
                    return $.modal.alertError("项目金额小数点后最多4位");
                }

                if ($("input[name='file']").val() === "")
                    return $.modal.alertError("请上传文件");

                // 校验课题名称不能包含特殊字符
                var topName = $("input[name='topName']").val();
                var specialCharPattern = /[@#￥%&*$!]/;

                if (specialCharPattern.test(topName)) {
                    return $.modal.alertError("课题名称不能包含特殊字符");
                }
                if (topName === "") {
                    return $.modal.alertError("课题名称不能为空或纯空格");
                }
                if (topName.length > 50) {
                    return $.modal.alertError("课题名称不能超过50个字符");
                }

            }
                $.operate.saveTab(prefix + "/edit", $('#form-apply-edit').serialize());
            }
        }

        $("input[name='signingData']").datetimepicker({
            format: "yyyy-mm-dd",
            minView: "month",
            autoclose: true
        });



        $(".file-upload").each(function (i) {
            var val = $("input[name='" + this.id + "']").val()
            var initialPreview = [];
            var initialPreviewConfig = [];
            
            if (val && val.trim() !== '') {
                initialPreview = [val];
                initialPreviewConfig = [{
                    type: "pdf",
                    caption: val.split('/').pop(),
                    url: ctx + "common/delete",
                    key: val
                }];
            }
            
            $(this).fileinput({
                'uploadUrl': ctx + 'common/upload/zxkt',
                initialPreviewAsData: true,
                initialPreview: initialPreview,
                initialPreviewConfig: initialPreviewConfig,
                maxFileCount: 1,
        maxFileSize: 51200,
                autoReplace: true,
                overwriteInitial: true,
                allowedFileExtensions: ["pdf"],
                slugCallback: function(filename) {
                    if ($("input[name='topName']").val()===""){
                        $(".file-upload").fileinput('clear');
                        $.modal.alertError("请先输入课题名称");
                        return false;
                    }
                    // 自定义文件名生成规则
                    fileExtension = filename.split('.').pop();
                    const year = new Date().getFullYear();
                    const newName = year +"-"+ $("input[name='topName']").val() +"-"+ "立项文件"+ "." + fileExtension;
                    return newName;
                },
            }).on('fileuploaded', function (event, data, previewId, index) {
                if (data.response && data.response.url) {
                    $("input[type='hidden'][name='file']").val(data.response.url);
                }
            }).on('fileremoved', function (event, id, index) {
                $("input[type='hidden'][name='file']").val('');
            }).on('fileclear', function (event) {
                $("input[type='hidden'][name='file']").val('');
            });
            $(this).fileinput('_initFileActions');
        });
    </script>
</body>
</html>